package com.jincheng.system.mapper;

import com.baomidou.mybatisplus.core.injector.methods.Insert;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jincheng.system.domain.SignInSheet;
import com.jincheng.system.domain.dto.SignInSheetScreenDTO;
import com.jincheng.system.domain.dto.SignInSheetSimpleDTO;
import com.jincheng.system.domain.vo.HeatMapVo;
import com.jincheng.system.domain.vo.IntegralVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 签到记录Mapper接口
 *
 * @author DairyJay
 * @date 2025-02-24
 */
public interface SignInSheetMapper extends BaseMapper<SignInSheet> {
    /**
     * 修改签到记录
     *
     * @param signInSheet 签到记录
     * @return 结果
     */
    public int updateSignInSheet(SignInSheet signInSheet);

    /**
     * 删除签到记录
     *
     * @param checkInId 签到记录主键
     * @return 结果
     */
    public int deleteSignInSheetByCheckInId(Long checkInId);

    /**
     * 批量删除签到记录
     *
     * @param checkInIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSignInSheetByCheckInIds(Long[] checkInIds);

    /**
     * 判断用户是否已经报名
     *
     * @param activityId 活动ID
     * @param userId     用户id
     * @return 是否报名
     */
    int checkWhetherApply(Long activityId, Long userId);

    /**
     * 根据活动ID查询报名信息
     *
     * @param signInSheetScreenDTO 活动ID
     * @return 报名信息
     */
    List<SignInSheetSimpleDTO> selectSignInSheetListByActivityId(SignInSheetScreenDTO signInSheetScreenDTO);

    /**
     * 根据用户id和年份查询活动报名信息
     *
     * @param userId 用户id
     * @param year 年份
     * @return 报名信息日历热力图数据
     */
    List<HeatMapVo> getUserHeatMap(@Param("userId") Long userId, @Param("year") Integer year);

    /**
     * 计算积分最大值、最小值、平均值
     * @return 最大值、最小值、平均值
     */
    IntegralVo getIntegralMaxMinAvg();

    /**
     * 查询当前用户积分以及排名
     */
    IntegralVo getIntegralAndRankByUser(Long userId);

    /**
     * 获取用户积分信息
     *
     * @param userId 用户id
     * @return 用户积分信息
     */
    IntegralVo getIntegral(Long userId);
}
